#ifndef BINARYTREE_H_INCLUDED
#define BINARYTREE_H_INCLUDED

#include "TreeNode.h"
#include <string.h>
/****************************************
 *  Project： 二叉链表
 *  Function:
 *  Description:
 *  Author: coder-itl
 ****************************************
 *  Copyright 2021/11/4 by coder-itl
 ****************************************/
/**
 * 二叉链表
 */
typedef struct {
    /* 二叉链的根节点 */
    TreeNode *root;
    /* 二叉链表节点的总数 */
    int length;
    /* 二叉链表的深度 */
    int depth;
    /* 直径: 从叶节点到叶节点的最长路径 */
    int diameter;
} BinaryTree;

/**
 * 初始化空二叉树
 * @param tree
 */
void InitBinaryTree(BinaryTree *tree);

/**
 * 构造二叉树- 外部需要事先对节点分配内存
 * @param root
 * @return 0(不创建或创建失败) | 1(创建成功)
 */
int CreateBinaryTree(TreeNode *root);

/**
 * 构造二叉树- 外部需要事先对节点分配内存
 * @param root
 */
int CreateBinaryTree_Test(TreeNode *root);

/**
 * 先序遍历: 根-左-右
 * @param node
 */
void PreOrderTraverse(TreeNode *node);

/**
 * 中序遍历: 左-根-右(左侧优先)
 * @param node
 */
void InOderTraverse(TreeNode *node);

/**
 * 后序遍历: 左-右-根(左下-右侧左下向上)
 * @param node
 */
void PostOrderTraverse(TreeNode *node);


#endif // BINARYTREE_H_INCLUDED
